<?php
   if ( !defined( "RUTA_FISICA_SISTEMA" ) )
    {
       require_once "../../../config/Constantes.php";
    }
     
  $ruta_sistema = RUTA_FISICA_SISTEMA . "/sistema/"; 
    
  require_once  $ruta_sistema . "config/ConstantesDB.php"; 
  
/**
 * 
 * Autor				: 	Juan Jose Muñiz Juarez
 * Fecha de Creacion	: 	19/05/2012,  23:36:49
 * Version 				: 	1.0
 * Descripcion 			:
 */
class Conexion
  {
    private static $hostname;
    private static $user;
    private static $pass;
    private static $database;
    private static $conexion;
    private static $_log;

    /**
     * 
     * Metodo: __construct
     * Descripcion: 
     * Fecha de Creacion: 06/03/2012 19:27:06
     * Autor: Juan José Muñiz Juárez
     * params: @param unknown_type $hostname
     * params: @param unknown_type $user
     * params: @param unknown_type $pass
     * params: @param unknown_type $database
     * return: return_type
     */
    public function __construct( $hostname = "localhost", $user = "root", $pass = "", $database = "sitkd" )
      {
         if ( defined( "BD_HOST" ) )
           {
              $this -> setHostName( BD_HOST ); 
           }
         else
           {
              $this -> setHostName ( $hostname );
              //echo "Entro";
           }  

         if ( defined( "BD_USER" ) )
           {
              $this -> setUser( BD_USER );
           }  
         else
           {
              $this -> setUser ( $user );
           }   
         
         if ( defined( "BD_PASS" ) )
           {
              $this -> setPass( BD_PASS );
           }
         else
           {
              $this -> setPass ( $pass );
           }  
           
         if ( defined( "BD_DATABASE" ) )
           {
              $this -> setDataBase( BD_DATABASE );
           }
         else
           {
              $this -> setDataBase ( $database );
           }  
           
         //$this -> _log = new Logger( __CLASS__ );  
      }

      // Setters
    public function setHostName( $hostname )
      {
        $this -> hostname = $hostname;
      }

    public function setUser( $user )
      {
        $this -> user = $user;
      }

    public function setPass( $pass )
      {
        $this -> pass = $pass;
      }

    public function setDataBase( $database )
      {
        $this -> database = $database;
      }

      /**
       * 
       * Metodo: getLogger
       * Descripcion: Devuelve la instancia del  
       * Fecha de Creacion: 19/04/2012 12:27:46
       * Autor: Juan José Muñiz Juárez
       * params: @param unknown_type $class
       * return: return_type
       */
    private static function getLogger( $class )
      {
         /*if ( self::$_log )
           {
              self::$_log ->setClass( $class );
           }
         else
           {
              self :: $_log = new Logger( $class );
           }  */
      }  
      
      /**
       * 
       * Nombre         	: 	getConexion
       * Descripcion   	:	
       * Version 			:  	1.0
       * Autor:			:	Juan Jose Muñiz Juarez
       * Fecha y Hora	:	17/04/2012, 23:11:38
       */
    public static function getConexion( $class, $generar_log = true )
      {
         self::cargarDatosConexion( $class, $generar_log );
         self:: conectarDB( $class, $generar_log );
         
         return self::$conexion;
      }

      /**
       * 
       * Metodo: cargarDatosConexion
       * Descripcion: 
       * Fecha de Creacion: 19/04/2012 12:25:52
       * Autor: Juan José Muñiz Juárez
       * params: 
       * return: return_type
       */
    private static function cargarDatosConexion( $class, $generar_log = true )
      {
         if ( $generar_log )
           {
              self::getLogger( $class );
             // self::$_log -> info( "Cargando los datos de la conexion ", __METHOD__, __LINE__ );
           }
           
         if ( !self::$conexion )
           {
              if ( defined( "BD_HOST" ) )
              {
                 self::$hostname =  BD_HOST; 
              }
            else
              {
                 self::$hostname = "localhost";
              }  
   
            if ( defined( "BD_USER" ) )
              {
                 self::$user = BD_USER;
              }  
            else
              {
                 self::$user = "root";
              }   
            
            if ( defined( "BD_PASS" ) )
              {
                 self::$pass = BD_PASS;
              }
            else
              {
                self::$pass = "";
              }  
              
            if ( defined( "BD_DATABASE" ) )
              {
                 self::$database = BD_DATABASE;
              }
            else
              {
                 self::$database = "sitkd";
              }  
           }
      }  
      
      /**
       * 
       * Metodo: conectarDB
       * Descripcion: 
       * Fecha de Creacion: 06/03/2012 19:27:16
       * Autor: Juan José Muñiz Juárez
       * params: 
       * return: return_type
       */
    private static function conectarDB( $class, $generar_log = true )
      {
         // Si no se ha creado la conexion entonces la generamos
        if ( !self:: $conexion )
           {
              if ( $generar_log )
                {
                    self::getLogger( $class );
                    
                    /*self::$_log -> debug( "Se esta intentando crear la conexion a la base de datos con la siguiente informacion " . PHP_EOL .
                                        " <label class='debug'>Hostname : </label> <label class='info_debug'>" . self::$hostname . "</label>" . PHP_EOL .
                                        " <label class='debug'>Usuario : </label> <label class='info_debug'>" . self::$user . "</label>". PHP_EOL .
                                        " <label class='debug'>Password : </label> <label class='info_debug'>" . self::$pass . "</label>" . PHP_EOL .
                                        " <label class='debug'>Base de Datos : </label> <label class='info_debug'>" . self::$database . "</label>" . PHP_EOL
                                        , __METHOD__, __LINE__ );*/
                }
              
              self:: $conexion = mysql_connect ( self::$hostname, self::$user, self::$pass );
        
              if ( self:: $conexion )
                {
                   mysql_select_db ( self::$database, self:: $conexion );
                   
                   mysql_query ( "SET NAMES 'utf-8'" );
                  
                   if ( $generar_log )
                     {
                         /*self::$_log -> debug( "Conectando al servidor: " . PHP_EOL .
                                              " <label class='debug'>Hostname : </label> <label class='info_debug'>" . self::$hostname . "</label>" . PHP_EOL .
                                              " <label class='debug'>Usuario : </label> <label class='info_debug'>" . self::$user . "</label>". PHP_EOL .
                                              " <label class='debug'>Password : </label> <label class='info_debug'>" . self::$pass . "</label>" . PHP_EOL .
                                              " <label class='debug'>Base de Datos : </label> <label class='info_debug'>" . self::$database . "</label>" . PHP_EOL
                                               , __METHOD__, __LINE__ );*/
                     }
      
      
                }
              else
                {
                   die ( "Error al intentar conectar al servidor, contacte con la persona encargada del sistema: ");
                }
           }
      }

      /**
       * 
       * Metodo: cerrarConexion
       * Descripcion: 
       * Fecha de Creacion: 06/03/2012 19:27:21
       * Autor: Juan José Muñiz Juárez
       * params: @param unknown_type $conexion
       * return: return_type
       */
    public function cerrarConexion( $conexion )
      {
        if ( ! empty ( $conexion ) )
          {
            mysql_close ( $conexion );
          }
      }
      
      /**
       * 
       * Nombre         	: 	getLog
       * Descripcion   	:	
       * Version 			:  	1.0
       * Autor:			:	Juan Jose Muñiz Juarez
       * Fecha y Hora		:	19/05/2012, 23:36:41
       */
    public static function getLog()
      {
         $mensaje = "Informacion de la conexion " . PHP_EOL .
                    " <label class='debug'>Hostname : </label> <label class='info_debug'>" . self::$hostname . "</label>" . PHP_EOL .
                    " <label class='debug'>Usuario : </label> <label class='info_debug'>" . self::$user . "</label>". PHP_EOL .
                    " <label class='debug'>Password : </label> <label class='info_debug'>" . self::$pass . "</label>" . PHP_EOL .
                    " <label class='debug'>Base de Datos : </label> <label class='info_debug'>" . self::$database . "</label>" . PHP_EOL;
            
         return $mensaje;
      }  

     public function __toString()
       {
          return "Servidor : " . $this -> _hostname . PHP_EOL .
                 " Usuario : " . $this -> _user . PHP_EOL .
                 " Password: " . $this -> _pass . PHP_EOL .
                 " Base de datos: " . $this -> _database;
       }  
  }
